package reflection;

/**
 * @author 小小唐
 * @Date 2022/8/28-星期日-12:42
 *
 * 测试类什么时候会初始化
 */
public class Demo5 {
    public static void main(String[] args) throws ClassNotFoundException {
        System.out.println("Main方法被加载");
        /*
        主动引用：会产生初始化
         */

        //1、new 一个类的对象
        //Son son = new Son();

        //2、反射产生主动引用
        //Class.forName("reflection.Son");

        /*
        被动引用：不会产生初始化
         */

        //1、通过子类调用父类时，不会触发子类的初始化
        //System.out.println(Son.b);

        //2、定义一个类的数组
        //Son[] array = new Son[5];

        //3、引用常量时不会触发该类的初始化（因为常量在链接阶段就已存入调用类的常量池中）
        System.out.println(Son.M);
    }
}

class Parent{

    static int b = 2;
    static {
        System.out.println("父类被加载");
    }
}

class Son extends Parent{
    static {
        System.out.println("子类被加载");
    }

    static int m = 1;
    static final int M = 3;
}

